package logique.solution;

import logique.programme.Vecteur;

public abstract class Variable {

	private int index;
	private Vecteur sonVecteur;
	
	public Variable (Vecteur v, int index) {
		this.index = index;
		this.sonVecteur = v;
	}

	public int getIndex() {
		return index;
	}
	public void setIndex(int i) {
		index = i;
	}
	
	public Vecteur getVecteur () {
		return sonVecteur;
	}
	
	public String getNomVecteur () {
		return sonVecteur == null ? "NONAME" : sonVecteur.getNom();
	}

	public abstract int getBorneMinEnt();
	public abstract int getBorneMaxEnt();
	public abstract double getBorneMinReel();
	public abstract double getBorneMaxReel();
	public abstract void setBorneMin(int n);
	public abstract void setBorneMax(int n);
	public abstract void setBorneMin(double x);
	public abstract void setBorneMax(double x);
	public abstract Variable getCopy(Vecteur v);
	
	public abstract Affectation<?> creerAffectation(Double valeur);
	
	public abstract String toString ();
	public String toStringCourt () {
		return getNomVecteur() + "\\" + getIndex();
	}
	public abstract void afficher ();
	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Variable) {
			Variable v = (Variable)obj;
			return (getIndex() == v.getIndex() && getNomVecteur() == v.getNomVecteur());
		}
		return false;
	}
	public boolean equals (String nomVecteur, int indice) {
		return nomVecteur.equals(getNomVecteur()) && index == indice;
	}
	
}
